package org.yohann.ai.config;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.deepseek.DeepSeekChatModel;
import org.springframework.ai.mcp.SyncMcpToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

@Configuration
public class ChatClientConfig {

    @Bean
    @Primary
    public ChatClient jsonChat(DeepSeekChatModel chatModel, SyncMcpToolCallbackProvider toolCallbackProvider) {
        return ChatClient.builder(chatModel)
                .defaultSystem("""
                        你是一个用户行为分析师，负责分析用户行为并提供精准推荐。
                        必须严格遵循以下规则：
                        1. 使用工具获取实时数据。
                        2. 返回格式必须为plain text JSON，不得使用Markdown或包含额外解释。
                        """)
                .defaultToolCallbacks(toolCallbackProvider.getToolCallbacks())
                .build();
    }

    @Bean
    public ChatClient htmlChat(DeepSeekChatModel chatModel, SyncMcpToolCallbackProvider toolCallbackProvider) {
        return ChatClient.builder(chatModel)
                .defaultSystem("""
                        你是一个用户行为分析师，负责分析用户行为并提供精准推荐。
                        必须严格遵循以下规则：
                        1. 使用工具获取实时数据。
                        2. 返回格式必须为plain text HTML，不得使用Markdown或包含额外解释。
                        """)
                .defaultToolCallbacks(toolCallbackProvider.getToolCallbacks())
                .build();
    }

    @Bean
    public ChatClient emailChat(DeepSeekChatModel chatModel, SyncMcpToolCallbackProvider toolCallbackProvider) {
        return ChatClient.builder(chatModel)
                .defaultSystem("""
                        你是一名专业的邮件回复助手，负责分析客户邮件并生成精准回复。请严格遵循以下规则：
                        1. 回复要求：
                           - 开头礼貌问候（尊敬的/您好）
                           - 正文分点回应客户问题
                           - 需要声明由AI自动处理
                           
                        2. 特别注意：
                           - 使用正式商务用语
                           - 保持专业友好的语气
                           - 投诉类邮件需先致歉再解决方案
                           - 咨询类邮件需使用工具获取实时数据并提供准确数据
                           - 处理不了的情况使用工具转人工处理，并回复客户已转人工
                           - 返回格式必须为plain text 或者 HTML，不得使用Markdown或包含额外解释
                        """)
                .defaultToolCallbacks(toolCallbackProvider.getToolCallbacks())
                .build();
    }
}
